C 文件读取 | 您所在的位置:网站首页 › c 文件读取 › C 文件读取 |
二进制读取
#include
int main()
{
FILE *fpRead = fopen("data/data.in","rb");
FILE *fpWrite = fopen("data/data.o","wb");
unsigned char buf[1000];
int rc;
while((rc = fread(buf,sizeof(unsigned char), 1, fpRead))!=0)
{ // 1. 一次读写一个字节,也可以一次读写n个字节,但rc总小于等于n,表示实际读取的字节数
// 2. fread 函数遇到'\0'后会停止读入,返回rc,并buf余下的位置会补0,因此不用担心会报错的情况
// 3. 在写入的时候也要给出写入多少个(rc),每一个数据有多少位(sizeof(typ)
fwrite( buf, sizeof(unsigned char), rc, fpWrite );
for(int i = 0; i < rc; i++)
{
printf("%x, ",buf[i]);
}
}
printf("\n");
fclose(fpRead);
fclose(fpWrite);
return 0;
}
FILE *fp = fopen("D:\\1.txt","rb+"); // 以二进制的形式打开文件1.txt, 如果文件不存在则返回NULL。文件以读写方式打开,可以用fp指针修改或者读取。 r 只读方式 w 只写方式, 如果文件不存在则新建一个文件,如果文件存在,则清空文件重写 r+ 可读可写,如果文件不存在则返回NULL w+ 可读可写,如果文件不存在则新建文件 a 追加方式,如果文件不存在则新建文件,如果文件存在则在末尾追加写入的数据 a+ 可读可写,写入的数据追加至末尾,如果文件不存在则新建文件 后面默认为t,以文件格式读写; 如果加上b,则以二进制文件读写(最小单位为字节,unsigned char) fread() 函数参数size_t fread(void *buf, size_t size, size_t num, FILE *stream) buf 指向带有最小尺寸 size*nmemb 字节的内存块的指针, 用来存读入的数据 size 每个元素大小,以字节为单位 num 一次读取的元素个数 stream 指向FILE对象的指针,由fopen函数生成 rc = fread(buf,sizeof(unsigned char), 10, fpRead)) buf一次存入10个字节的数据,也可能由于文件缺失,只读了一部分,rc记录读入的元素个数,如果rc==0,说明读入完成。 fscanf() 函数参数int fscanf(FILE * stream, const char * format, [argument...]) stream 指向FILE对象的指针,输入流(跟cin类似,指键盘上输入)fin则从文件输入,由fopen创建。 format 一次读入文件的格式,例如"%s %s %s %d" [argument...] 读取的数据保存的位置, s0,s1,s2,&num 返回读入参数的个数,读取失败则返回EOF(-1) 按结构体读取文件 #include typedef struct Student{ int age; char name[10]; int gender; }Stu; int main() { FILE *fpRead = fopen("data/data.in","r");//将data.in文件存在data文件夹下 FILE *fpWrite = fopen("data/data.o","w"); Stu buf[1000]; //定义缓存区 int j = 0; while((fscanf(fpRead,"%d,%d,%s",&buf[j].age,&buf[j].gender,buf[j].name))!=EOF) //结构化数据输入 { printf("age:%d name:%s gender:%s\n",buf[j].age,buf[j].name,buf[j].gender?"男":"女"); fprintf(fpWrite,"age:%d name:%s gender:%s\n",buf[j].age,buf[j].name,buf[j].gender?"男":"女"); //结构化数据输出 j++; } printf("\n"); fclose(fpRead); fclose(fpWrite); return 0; }读取的文件 12,1,Tom 14,0,Sara 12,1,Jack 18,0,Kate输出:
输入输出重定向,也可以解决大部分问题 实例:代码如下: 将in.txt中的输入两两相乘然后输出到out.txt文件中 c写法: #include int main() { int a, b; freopen("in.txt", "r", stdin); //输入重定向,输入数据将从in.txt文件中读取 freopen("out.txt", "w", stdout); //输出重定向,输出数据将保存在out.txt文件中 while (scanf("%d %d",&a,&b)!=EOF) { printf("%d ",a*b); } fclose(stdin); //关闭文件 fclose(stdout); //关闭文件 return 0; }也可以简单写如下代码: test.c文件: #include int main() { int a, b; while (scanf("%d %d",&a,&b)!=EOF) { printf("%d ",a*b); } return 0; }在命令行输入 g++ -o test test.c test.exe out.txt 在命令行指定输入输出文件也可以实现上面的功能 C++写法 #include using namespace std; int main() { int a, b; ifstream inFile("in.txt"); ofstream outFile("out.txt"); while (inFile >> a >> b) { outFile |
今日新闻 |
推荐新闻 |
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 |